import logging
from logging.handlers import TimedRotatingFileHandler
import os
from datetime import datetime

# 日志文件夹路径
LOG_FOLDER = '../logs'
os.makedirs(LOG_FOLDER, exist_ok=True)  # 创建日志文件夹，如果不存在的话


# 动态生成日志文件名模板
def get_log_filename():
    date_str = datetime.now().strftime('%Y-%m-%d')
    return os.path.join(LOG_FOLDER, f'{date_str}.log')


# 自定义日志记录器类
class CustomLogger(logging.Logger):
    def error(self, msg, *args, **kwargs):
        if 'exc_info' not in kwargs:
            kwargs['exc_info'] = True
        super().error(msg, *args, **kwargs)


# 配置日志记录器
def configure_logger(name=__name__):
    # 创建一个基于时间滚动的日志处理器
    file_handler = TimedRotatingFileHandler(get_log_filename(), when='midnight', interval=1, backupCount=7)
    file_handler.suffix = '%Y-%m-%d'  # 设置日志文件名中的日期格式

    # 设置日志格式
    formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - [%(filename)s:%(lineno)d] - %(message)s')
    file_handler.setFormatter(formatter)

    # 创建一个控制台处理器
    console_handler = logging.StreamHandler()
    console_handler.setFormatter(formatter)

    # 获取或创建日志记录器
    logger = CustomLogger(name)
    logger.setLevel(logging.DEBUG)  # 设置记录器的日志级别为 DEBUG

    # 添加处理器到记录器
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)

    return logger


# 导出配置好的日志记录器
logger = configure_logger()
